﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using MigColetaMinMax.Entidades;
using MigColetaMinMax.DAO;

namespace MigColetaMinMax
{
    public partial class FrmPrincipal : Form
    {        
        public FrmPrincipal()
        {            
            InitializeComponent();
            bar.Visible = false;
            cbRemessa.Focus();
            dgGrid.Visible = false;
        }

        private void cbRemessa_KeyDown(object sender, KeyEventArgs e)
        {
            TeclaKeyPress ky = new TeclaKeyPress();
            if (ky.TeclaEnterPress(sender, e) == true)
                dpMeses.Focus();
                       
        }

        private void ProcessaEnvioRoteiro()
        {
            SQLMSDataAccess db = new SQLMSDataAccess();

            Roteiro roteiro = new Roteiro();
            roteiro.Remessa = int.Parse(cbRemessa.Text);
            roteiro.Mesfat = "01/" + dpMeses.Text;
            CalendarioLeitura calendario = Controle.Ctl_SQL.CtlSQLServer.ObterCalendarioLeitura(roteiro);

            for (int i = 0; i < dgGrid.Rows.Count; i++)
            {   // Obtém o leiturista de acordo com a matricula.
                roteiro.Leiturista = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[0].Value.ToString()));
                // Obtendo os dados de controle
                Entidades.Controle ctr = roteiro.ObterControle(calendario);

                roteiro.Leituras = ObterLeiturasArquivo(roteiro.Leiturista.Diretorio_exp + @"\" + "LEITURAS.txt");

                ctr.TotRegistros = roteiro.Leituras.Count;

                ctr.MinNumOrdem = dgGrid.Rows[i].Cells[4].Value.ToString();
                ctr.MaxNumOrdem = dgGrid.Rows[i].Cells[5].Value.ToString();

                //Gera o arquivo de controle "Controle.txt"
                EscreveArquivoControle(ctr, roteiro.Leiturista.Diretorio_exp);

                db.InserirRoteiro(roteiro, ctr);

                roteiro.Leituras = null;
            }

        }

        private void ProcessaRetornoRoteiro()
        {
            Roteiro roteiro = new Roteiro();
            roteiro.Mesfat = "01/" + dpMeses.Text;
            roteiro.Remessa = int.Parse(cbRemessa.Text);

            ORAMSDataAccess db = new ORAMSDataAccess();
            SQLMSDataAccess dbSql = new SQLMSDataAccess();
            bool enviado, concluido;            
            for (int i = 0; i < dgGrid.Rows.Count; i++)
            {
                enviado = Convert.ToBoolean(dgGrid.Rows[i].Cells[9].Value);
                concluido = Convert.ToBoolean(dgGrid.Rows[i].Cells[7].Value);
                if (!enviado && concluido)
                {   // Obtém o leiturista
                    roteiro.Leiturista = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[2].Value.ToString()));
                    // Recebe as leituras coletadas
                    roteiro.Leituras = roteiro.Leiturista.ObterLeituras(roteiro);
                    // Gera o arquivo das leituras para poder importa no sistema Useall.
                    EscreveLeituras(roteiro.Leituras, roteiro.Leiturista.Diretorio_imp);
                    // Insere as leituras no Oracle para disponibilidar ao comercial.
                    db.InsereRetornoLeituras_WM(roteiro);
                    // Informa que o arquivo foi gerado!
                    dbSql.MarcarGeracaoArquivo(roteiro);
                }
            }
            dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraRemMes(int.Parse(cbRemessa.Text), dpMeses.Text.Replace("/", ""));
            AtivarGrid();
        }

        private void EscreveArquivoControle(Entidades.Controle ctr, string path)
        {
            StreamWriter arqTexto = new StreamWriter(path + "\\CONTROLE.txt", false, Encoding.Default);

            string sLinha = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|COM9",
                        ctr.DataInicioLeitura,
                        ctr.DataFinalLeitura,
                        ctr.MesFat,
                        ctr.Remessa.ToString().PadLeft(2, '0'),
                        ctr.Matricula.PadLeft(4,  '0'),
                        ctr.Leiturista.PadRight(30, ' '),
                        ctr.Roteiro.ToString().PadLeft(4, '0'),
                        ctr.TotRegistros.ToString().PadLeft(4, '0'));

            arqTexto.Write(sLinha);
            arqTexto.Close();
        }    

        private void RemoverFotosExternasServidor()
        {
            string pathServer;

            for (int i = 0; i < dgGrid.Rows.Count; i++)
            {   
                Leiturista obj = new Leiturista();
                obj = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[0].Value.ToString()));

                pathServer = obj.Diretorio_imp + @"\Fotos\Externa\";

                System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServer);
                System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.jpg");
                
                foreach (System.IO.FileInfo item in arquivos)
                {                    
                    if (File.Exists(pathServer + item.Name) == true)
                        File.Delete(pathServer + item.Name);

                }
                               
            }

            return;
        }

        private void RemoverFotosDasUCSServidor()
        {
            string pathServer;

            for (int i = 0; i < dgGrid.Rows.Count; i++)
            {
                Leiturista obj = new Leiturista();
                obj = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[0].Value.ToString()));

                pathServer = obj.Diretorio_imp + @"\Fotos\Coleta\";

                System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServer);
                System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.jpg");

                foreach (System.IO.FileInfo item in arquivos)
                {
                    File.Delete(pathServer + item.Name);
                }

                pathServer = obj.Diretorio_imp + @"\Fotos\Externa\";

                diretorio = new System.IO.DirectoryInfo(pathServer);
                arquivos = diretorio.GetFiles("*.jpg");

                foreach (System.IO.FileInfo arq in arquivos)
                {                    
                    File.Delete(pathServer + arq.Name);
                }
            }

            return;
        }

        private void EscreveLeituras(IList<Leitura> leituras, string path)
        {
            string str;
            StreamWriter arq = new StreamWriter(path + "\\LEITURAS.txt", false, Encoding.Default);
            foreach (var leitura in leituras)
            {
                str = string.Format("{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}|{10}|{11}|{12}|{13}|{14}|{15}|{16}|{17}|{18}|{19}|{20}|{21}|{22}|{23}|{24}|{25}|{26}|{27}|{28}|{29}|{30}|{31}|{32}|{33}|{34}|{35}|{36}|{37}|{38}|{39}|{40}|{41}|{42}|{43}",
                                    leitura.SeqLeitura.PadLeft(6, '0'),
                                    leitura.Endereco.PadRight(55, ' '),
                                    leitura.Fase.PadLeft(1, ' '),
                                    leitura.Medidor.PadLeft(12, '0'),
                                    leitura.Constante.PadLeft(2, '0'),
                                    leitura.LeituraAnterior.PadLeft(8, '0'),
                                    leitura.LeituraAtual.PadLeft(8, '0'),
                                    leitura.Classe.PadLeft(1, ' '),
                                    leitura.LeitMin.PadLeft(6, '0'),
                                    leitura.LeitMax.PadLeft(6, '0'),
                                    leitura.Ocorrencia1.PadLeft(3, ' '),
                                    leitura.Ocorrencia2.PadLeft(3, ' '),
                                    leitura.Ocorrencia3.PadLeft(3, ' '),
                                    leitura.Ocorrencia4.PadLeft(3, ' '),
                                    leitura.DataLeitura.PadLeft(8, ' '),
                                    leitura.HoraLeitura.PadLeft(5, ' '),
                                    leitura.Uc.PadLeft(6, ' '),
                                    leitura.Fixo1.PadLeft(1, ' '),
                                    leitura.Fixo2.PadLeft(1, ' '),
                                    leitura.Fixo3.PadLeft(1, ' '),
                                    leitura.Fixo4.PadLeft(1, ' '),
                                    leitura.Fixo5.PadLeft(1, ' '),
                                    leitura.Fixo6.PadLeft(1, ' '),
                                    leitura.Nome.PadRight(100, ' '),
                                    leitura.IdRegiao.PadLeft(2, '0'),
                                    leitura.Ligado.PadLeft(1, ' '),
                                    leitura.IdMotivoDeslig.PadLeft(2, '0'),
                                    leitura.OcorrenciaAnt.PadLeft(2, '0'),
                                    leitura.IdRota.PadLeft(4, '0'),
                                    leitura.AcertosLeit.ToString().PadLeft(4, ' '),
                                    leitura.MedidorRetirado.PadLeft(12, '0'),
                                    leitura.Complemento.PadRight(45, ' '),
                                    leitura.Latitude.PadLeft(15, '0'),
                                    leitura.Longitude.PadLeft(15, '0'),
                                    leitura.LatDegress.PadLeft(15, '0'),
                                    leitura.LngDegress.PadLeft(15, '0'),
                                    leitura.UTM_x.PadLeft(15, '0'),
                                    leitura.UTM_y.PadLeft(15, '0'),
                                    leitura.MedidorAlt.PadLeft(12, '0'),
                                    leitura.Fabricante.PadRight(20, ' '),
                                    leitura.Marca.PadRight(20, ' '),
                                    leitura.Modelo.PadRight(20, ' '),
                                    leitura.DtHrSat.ToString("dd/MM/yyyy hh:mi:ss").PadRight(19, ' '),
                                    leitura.IdFoto.PadRight(12, ' ')
                                    );

                arq.WriteLine(str);
            }
            arq.Close();
        }

        private IList<Leitura> ObterLeiturasArquivo(string path)
        {
            string sLinha = string.Empty;
            IList<Leitura> leituras = new List<Leitura>();
            Leitura leitura = new Leitura();
            StreamReader stRd = new StreamReader(path, Encoding.Default);

            sLinha = stRd.ReadLine();

            while (sLinha != null)
            {
                leituras.Add(leitura.getLeituraToFileSource(sLinha));
                sLinha = stRd.ReadLine();
            }
            stRd.Close();
            return leituras;
        }

        private void btConsultar_Click(object sender, EventArgs e)
        {            
            if (txtMetodoOculto.Text == string.Empty)
            {
                btEnviar.Enabled = false;
                if (dpMeses.Text == string.Empty)
                    return;

                if (cbRemessa.Text == string.Empty)
                    return;

                bar.Visible = true;
                CarregaStatusBar(1000);
                bar.Visible = false;

                string diamesano = "01" + dpMeses.Text.Substring(0, 2) + dpMeses.Text.Substring(3, 4);

                dgGrid.Visible = true;

                if (rbEnvio.Checked)
                    dgGrid.DataSource = Controle.Ctl_Oracle.CtlOracle.ObterMinMax(int.Parse(cbRemessa.Text), diamesano);
                else
                    dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraRemMes(int.Parse(cbRemessa.Text), dpMeses.Text.Replace("/", ""));
                
                //Verifica se a coluna 'MinNumOrdem' está com sequência: 000000 - sequência errada.
                for (int i = 0; i < dgGrid.Rows.Count; i++)
                {                    
                    if (dgGrid.Rows[i].Cells[4].Value.ToString() == "000000")
                    {
                        MessageBox.Show("A sequência de leitura está incorreta, precisa ser corrigida!","Atenção!",MessageBoxButtons.OK,MessageBoxIcon.Error);
                        return;
                    }
                }
                btEnviar.Enabled = true;
                AtivarGrid();

            }
            else
            {
                btEnviar.Enabled = false;
                //Verifica os métodos de chamadas(+Filtros...) de acordo com o mais filtros.
                switch (txtMetodoOculto.Text)
                {
                    case "ObterRoteiroRemMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterRoteiroRemMes(int.Parse(txtRemessa.Text), txtMes.Text.Substring(0, 2) + (txtMes.Text.Substring(3, 4)));
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterLeituraRemMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraRemMes(int.Parse(txtRemessa.Text), txtMes.Text.Substring(0, 2) + (txtMes.Text.Substring(3, 4)));
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterRoteiroMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterRoteiroMes(txtMes.Text.Substring(0, 2) + (txtMes.Text.Substring(3, 4)));
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterLeituraMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraMes(txtMes.Text.Substring(0, 2) + (txtMes.Text.Substring(3, 4)));
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterRoteiroLeiturista":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterRoteiroLeiturista(txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterLeituraLeiturista":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraLeiturista(txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterRoteiroLeituristaMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterRoteiroLeituristaMes((txtMes.Text.Substring(0, 2) + txtMes.Text.Substring(3, 4)), txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterLeituraLeituristaMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraLeituristaMes((txtMes.Text.Substring(0, 2) + txtMes.Text.Substring(3, 4)), txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterRoteiroLeituristaRemMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterRoteiroLeituristaRemMes((txtMes.Text.Substring(0, 2) + txtMes.Text.Substring(3, 4)), int.Parse(txtRemessa.Text),txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterLeituraLeituristaRemMes":
                        dgGrid.DataSource = MigColetaMinMax.Controle.Ctl_SQL.CtlConsultaSQL.ObterLeituraLeituristaRemMes((txtMes.Text.Substring(0, 2) + txtMes.Text.Substring(3, 4)), int.Parse(txtRemessa.Text), txtMatricula.Text);
                        dgGrid.AutoGenerateColumns = true;
                        AtivarGrid();
                        break;
                    case "ObterHistoricoRotas":
                        DataTable dt = Controle.Ctl_Oracle.CtlOracle.ObterHistoricoRotas(int.Parse(txtRemessa.Text));
                        if (dt.Rows.Count > 0)
                        {
                            lbBase.Text = string.Empty;
                            dgGrid.Visible = true;
                            dgGrid.DataSource = dt;
                            dgGrid.AutoGenerateColumns = true;
                            AtivarGridHistoricoRotas();        
                        }
                        break;
                    case "ObterPorRotas":
                        DataTable dtb = Controle.Ctl_Oracle.CtlOracle.ObterPorRotas(int.Parse(txtRotas.Text));
                        if (dtb.Rows.Count > 0)
                        {
                            lbBase.Text = string.Empty;
                            dgGrid.Visible = true;
                            dgGrid.DataSource = dtb;
                            dgGrid.AutoGenerateColumns = true;
                            AtivarGrid();    
                        }
                        break;
                    default:                        
                        break;
                }
                
                switch (txtTipo.Text)
                {
                    case "R":
                        lbBase.Text = ":: BASE ROTEIRO";
                        break;
                    case "L":
                        lbBase.Text = ":: BASE LEITURA";
                        break;
                    default:                        
                        break;
                }

                if (dgGrid.RowCount == 0)
                    lbBase.Text = string.Empty;

            }
        }

        private void AtivarGrid()
        {            
            if (dgGrid.RowCount == 0)
            {
                btEnviar.Enabled = false;
                txtTotalReg.Text = string.Empty;
                return;
            }
            
            dgGrid.Visible = true;
            dgGrid.AutoGenerateColumns = true;

            for (int i = 0; i < (dgGrid.RowCount - 1); i++)
            {
                if (i % 2 == 0)
                {
                    dgGrid.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                    dgGrid.Rows[i].DefaultCellStyle.BackColor = Color.Lavender;
                }
                else
                {
                    dgGrid.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                    dgGrid.Rows[i].DefaultCellStyle.BackColor = Color.DarkGray;
                }

            }
            dgGrid.ReadOnly = true;

            if (dgGrid.RowCount > 0)
                txtTotalReg.Text = dgGrid.RowCount.ToString();

        }

        private void CarregaStatusBar(int qtdReg)
        {   
            bar.Minimum = 0;
            bar.Maximum = qtdReg;
            for (int i = 0; i < qtdReg; i++)
            {
                bar.Value = i;
            }              
        }


        private void btEnviar_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor.Current = Cursors.WaitCursor;
                if (rbEnvio.Checked)
                {
                    ProcessaEnvioRoteiro();
                    MessageBox.Show("O envio do roteiro foi concluído com sucesso.", "Informação!", MessageBoxButtons.OK);
                }
                else
                {
                    ProcessaRetornoRoteiro();
                    MessageBox.Show("O retorno do roteiro foi concluído com sucesso.", "Informação!", MessageBoxButtons.OK);
                }
                Cursor.Current = Cursors.Default;
            }
            catch (Exception ex)
            {
                MessageBox.Show(string.Format("Falha na execução do processo.\n{0}", ex.Message), "Erro!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void FrmPrincipal_Load(object sender, EventArgs e)
        {
            lbBase.Text = string.Empty;
            List<string> lst = new List<string>();

            string mes = DateTime.Now.Month.ToString().PadLeft(2,'0') + @"/" + DateTime.Now.Year.ToString();
            dpMeses.Text = DateTime.Now.Month.ToString().PadLeft(2, '0') + @"/" + DateTime.Now.Year.ToString();

            dpMeses.Items.Clear();
            if (mes != "04/2008")
            {
                lst = PreencherDomain(mes);
                
                foreach (string item in lst)
                {
                    dpMeses.Items.Add(item);                
                }
                
            }
                        
        }

        private List<string> PreencherDomain(string mes)
        {
            string ms = string.Empty;
            string ano = string.Empty;
            List<string> retorno = new List<string>();

            if (mes == DateTime.Now.Month.ToString().PadLeft(2, '0') + @"/" + DateTime.Now.Year.ToString())
            {
                dpMeses.Items.Add(mes);
            }
            while (mes != "04/2008")
            {
                if (mes.Substring(0, 2) == "01")
                {
                    ms = "12";
                    ano = (int.Parse(mes.Substring(3, 4)) - 1).ToString();
                }
                else
                {
                    ms = (int.Parse(mes.Substring(0, 2)) - 1).ToString().PadLeft(2, '0');
                    ano = (int.Parse(mes.Substring(3, 4))).ToString();
                }
                mes = ms + @"/" + ano;
                retorno.Add(ms + @"/" + ano);
            }   
                
            return retorno;
        }

        private void dpMeses_KeyDown(object sender, KeyEventArgs e)
        {
            TeclaKeyPress ky = new TeclaKeyPress();
            if (ky.TeclaEnterPress(sender, e) == true)
            {
                if (dpMeses.Text.Length < 7)
                {
                    if (dpMeses.Text.Length < 7 || dpMeses.Text.Length < 0)
                    {
                        MessageBox.Show("O mês informado está inválido!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);                        
                        dpMeses.Focus();
                        return;
                    }
                    btConsultar.Focus();
                    return;
                }
                if (int.Parse(dpMeses.Text.Substring(0, 2)) < 1 || int.Parse(dpMeses.Text.Substring(0, 2)) > 12)
                {
                    MessageBox.Show("O mês informado está inválido!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);                    
                    return;
                }
                else
                {
                    if (int.Parse(dpMeses.Text.Substring(3, 4)) < 2010)
                    {
                        MessageBox.Show("Não há dados inferior ao Ano de 2010!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error);                    
                        return;
                    }
                    else
                    {                        
                        btConsultar.Focus();                        
                    }
                }
            }
        }

        private void btMaisFiltros_Click(object sender, EventArgs e)
        {
            FrmMaisFiltros f = new FrmMaisFiltros(this);
            f.ShowDialog();
        }

        private void cbRemessa_SelectedIndexChanged(object sender, EventArgs e)
        {
            txtMetodoOculto.Text = string.Empty;
            lbBase.Text = string.Empty;
        }

        private void AtivarGridHistoricoRotas()
        {
            if (dgGrid.RowCount == 0)
            {
                btEnviar.Enabled = false;
                txtTotalReg.Text = string.Empty;
                return;
            }
            string estado = string.Empty;
            string estadoAnt = string.Empty;

            int i = 0;
            
            dgGrid.Visible = true;
            dgGrid.AutoGenerateColumns = true;

            foreach (DataGridViewRow dg in dgGrid.Rows)
            {
                if (estado == string.Empty)
                {
                    estado = dgGrid.Rows[i].Cells[1].Value.ToString();
                    estadoAnt = dgGrid.Rows[i].Cells[1].Value.ToString();
                }
                
                estado = dgGrid.Rows[i].Cells[1].Value.ToString();

                if (estado == estadoAnt)
                {
                    dgGrid.Rows[i].DefaultCellStyle.ForeColor = Color.Black;
                    dgGrid.Rows[i].DefaultCellStyle.BackColor = Color.Lavender;
                    if (i == 0)
                    {
                        dgGrid.Rows[i].DefaultCellStyle.ForeColor = Color.White;                        
                        dgGrid.Rows[i].DefaultCellStyle.BackColor = Color.LightSlateGray;
                    }
                }
                else
                {                    
                    dgGrid.Rows[i].DefaultCellStyle.ForeColor = Color.White;
                    dgGrid.Rows[i].DefaultCellStyle.BackColor = Color.LightSlateGray;                    
                    estadoAnt = dgGrid.Rows[i].Cells[1].Value.ToString();
                }
                
                i++;
            }
            
            dgGrid.ReadOnly = true;

            if (dgGrid.RowCount > 0)
                txtTotalReg.Text = dgGrid.RowCount.ToString();

        }

        private void dgGrid_Sorted(object sender, EventArgs e)
        {            
            AtivarGrid();
        }

        //private bool GeracaoDeRetorno_WindowsMobile()
        //{
        //    bool retorno = true;
        //    string dataInicio = string.Empty;

        //    Roteiro rot = new Roteiro();
        //    rot.Mesfat = "01/" + dpMeses.Text;
        //    rot.Remessa = int.Parse(cbRemessa.Text);

        //    if (Controle.Ctl_Oracle.CtlOracle.ExistRetorno(rot) == true)
        //    {
        //        retorno = false;
        //        MessageBox.Show("Esses dados já foram inserido anteriormente!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        //    }
        //    else
        //    {
        //        try
        //        {
        //            for (int i = 0; i < dgGrid.Rows.Count; i++)
        //            {
        //                string pathServer = string.Empty;
        //                string sLinha = string.Empty;

        //                Leiturista obj = new Leiturista();
        //                obj = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[0].Value.ToString()));

        //                List<Retorno> lst = new List<Retorno>();

        //                //Especifica path do arquivo Leituras.txt
        //                using (StreamReader arqTexto = new StreamReader(obj.Diretorio_imp + @"\" + "LEITURAS.txt", Encoding.Default))
        //                {

        //                    sLinha = "";
        //                    while ((sLinha = arqTexto.ReadLine()) != null)
        //                    {
        //                        Retorno objeto = new Retorno();

        //                        //verifica o arquivo LEITURA.txt pertence ao Grupo Fat
        //                        // informado:
        //                        if (int.Parse(cbRemessa.Text) != Int16.Parse(sLinha.Substring(282, 1)))
        //                        {
        //                            MessageBox.Show("O grupo de faturamento " + sLinha.Substring(282, 1) + " do arquivo LEITURAS.txt não confere com o informado.", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation, MessageBoxDefaultButton.Button1);
        //                            retorno = false;
        //                            break;
        //                        }

        //                        objeto.Matricula = dgGrid.Rows[i].Cells[0].Value.ToString();

        //                        objeto.Leiturista = dgGrid.Rows[i].Cells[1].Value.ToString();
        //                        objeto.IdUC = Int32.Parse(sLinha.Substring(146, 6));
        //                        objeto.Nr_medidor_kwh = Int64.Parse(sLinha.Substring(65, 12));
        //                        objeto.IdGrupoFat = int.Parse(sLinha.Substring(282, 1));
        //                        objeto.Mes_ano = "01/" + dpMeses.Text;
        //                        objeto.IdRota = Int16.Parse(sLinha.Substring(282, 4));

        //                        if (sLinha.Substring(90, 8).Trim() == "")
        //                        {
        //                            objeto.Leitura_Lida = 0;
        //                        }
        //                        else
        //                        {
        //                            objeto.Leitura_Lida = Int32.Parse(sLinha.Substring(90, 8));
        //                        }

        //                        objeto.Data_Leitura = sLinha.Substring(131, 8).Trim();

        //                        if (sLinha.Substring(523, 19).Trim() == "")
        //                        {
        //                            objeto.Data_Satelite = DateTime.Parse("01/01/1900 00:00:00");
        //                        }
        //                        else
        //                        {
        //                            objeto.Data_Satelite = DateTime.Parse(sLinha.Substring(523, 19));
        //                        }

        //                        if (sLinha.Substring(115, 3).Trim() == "" || sLinha.Substring(115, 3).Trim() == "000")
        //                        {
        //                            objeto.Mens1 = string.Empty;
        //                        }
        //                        else
        //                        {
        //                            objeto.Mens1 = sLinha.Substring(115, 3).Trim();
        //                        }

        //                        if (sLinha.Substring(119, 3).Trim() == "" || sLinha.Substring(119, 3).Trim() == "000")
        //                        {
        //                            objeto.Mens2 = string.Empty;
        //                        }
        //                        else
        //                        {
        //                            objeto.Mens2 = sLinha.Substring(119, 3).Trim();
        //                        }

        //                        if (sLinha.Substring(123, 3).Trim() == "" || sLinha.Substring(123, 3).Trim() == "000")
        //                        {
        //                            objeto.Mens3 = string.Empty;
        //                        }
        //                        else
        //                        {
        //                            objeto.Mens3 = sLinha.Substring(123, 3).Trim();
        //                        }

        //                        if (sLinha.Substring(127, 3).Trim() == "" || sLinha.Substring(127, 3).Trim() == "000")
        //                        {
        //                            objeto.Mens4 = string.Empty;
        //                        }
        //                        else
        //                        {
        //                            objeto.Mens4 = sLinha.Substring(127, 3).Trim();
        //                        }

        //                        objeto.Utm_x = sLinha.Substring(415, 15).Trim();
        //                        objeto.Utm_y = sLinha.Substring(431, 15).Trim();
        //                        objeto.Latitude = sLinha.Substring(351, 15).Trim();
        //                        objeto.Longitude = sLinha.Substring(367, 15).Trim();
        //                        objeto.Lat_degress = sLinha.Substring(383, 15).Trim();
        //                        objeto.Lng_degress = sLinha.Substring(399, 15).Trim();
        //                        objeto.Cal_Distancia = 0; //Implementar o calculo enrtre as distancias
        //                        objeto.Tempo_percorrido = DateTime.Parse("01/01/1900 00:00:00"); //Calcula o tempo percorrido entre as ucs.

        //                        objeto.IdFoto = sLinha.Substring(543, 12).Trim();

        //                        if (objeto.IdFoto != string.Empty)
        //                        {
        //                            if (File.Exists(obj.Diretorio_imp + @"\Fotos\Coleta\" + objeto.IdFoto + ".jpg") == true)
        //                            {
        //                                objeto.FotoDigital = Controle.Ctl_Oracle.CtlOracle.ConverterImagemByte(obj.Diretorio_imp + @"\Fotos\Coleta\" + objeto.IdFoto + ".jpg");
        //                            }
        //                            else
        //                            {
        //                                objeto.IdFoto = null;
        //                                objeto.FotoDigital = null;
        //                            }
        //                        }
        //                        else
        //                        {
        //                            objeto.FotoDigital = null;
        //                        }

        //                        lst.Add(objeto);
        //                    }

        //                    arqTexto.Close();
        //                    arqTexto.Dispose();
        //                }


        //                //Adiciona no Banco de Dados as informações carregadas na Lista de Objetos:
        //                if (Controle.Ctl_Oracle.CtlOracle.InserirRetorno(lst) == false)
        //                {
        //                    MessageBox.Show("Não foi possível inserir as leituras coletadas!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        //                    retorno = false;
        //                    break;
        //                }

        //            }
        //        }
        //        catch (Exception ex)
        //        {
        //            retorno = false;
        //            btEnviar.Enabled = false;

        //            //Executa uma deleção já que não obteve êxito em todo o processo.
        //            Roteiro obj = new Roteiro();
        //            rot.Mesfat = "01/" + dpMeses.Text;
        //            rot.Remessa = int.Parse(cbRemessa.Text);
        //            Controle.Ctl_Oracle.CtlOracle.DeleteRetorno(rot);

        //            MessageBox.Show("Não foi encontrado o arquivo LEITURAS.txt no caminho abaixo especificado: " + ex.Message, "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

        //        }
        //    }

        //    return retorno;
        //}

        //private bool GeracaoDeRetornoFotoExterna_WindowsMobile()
        //{
        //    bool retorno = true;
        //    string dataInicio = string.Empty;

        //    Retorno rot = new Retorno();
        //    rot.Mes_ano = "01/" + dpMeses.Text;
        //    rot.IdGrupoFat = int.Parse(cbRemessa.Text);

        //    try
        //    {
        //        for (int i = 0; i < dgGrid.Rows.Count; i++)
        //        {
        //            string pathServer = string.Empty;
        //            string sLinha = string.Empty;

        //            Leiturista obj = new Leiturista();
        //            obj = Controle.Ctl_Oracle.CtlOracle.ObterLeiturista(int.Parse(dgGrid.Rows[i].Cells[0].Value.ToString()));

        //            List<Retorno> lst = new List<Retorno>();

        //            pathServer = obj.Diretorio_imp + @"\Fotos\Externa\";

        //            System.IO.DirectoryInfo diretorio = new System.IO.DirectoryInfo(pathServer);
        //            System.IO.FileInfo[] arquivos = diretorio.GetFiles("*.jpg");

        //            foreach (System.IO.FileInfo item in arquivos)
        //            {
        //                Retorno objeto = new Retorno();
        //                objeto.IdGrupoFat = int.Parse(dgGrid.Rows[i].Cells[2].Value.ToString());
        //                objeto.Mes_ano = "01/" + dgGrid.Rows[i].Cells[3].Value.ToString().Substring(0, 2) + "/" + dgGrid.Rows[i].Cells[3].Value.ToString().Substring(2, 4);
        //                objeto.Matricula = dgGrid.Rows[i].Cells[0].Value.ToString();
        //                objeto.Leiturista = dgGrid.Rows[i].Cells[1].Value.ToString();
        //                objeto.IdFoto = item.Name.Substring(0, 13);
        //                objeto.FotoDigital = Controle.Ctl_Oracle.CtlOracle.ConverterImagemByte(pathServer + item.Name);
        //                objeto.DataFoto = DateTime.Parse(item.Name.Substring(4, 2) + "/" +
        //                                                 item.Name.Substring(2, 2) + "/" +
        //                                                 "20" + item.Name.Substring(0, 2));

        //                lst.Add(objeto);
        //            }

        //            if (lst.Count > 0)
        //            {
        //                //Adiciona no Banco de Dados as informações carregadas na Lista de Objetos:
        //                if (Controle.Ctl_Oracle.CtlOracle.InserirRetornoFotosExternas(lst) == false)
        //                {
        //                    MessageBox.Show("Não foi possível inserir as fotos registradas!", "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
        //                    retorno = false;
        //                    break;
        //                }
        //            }
        //        }
        //    }
        //    catch (Exception ex)
        //    {
        //        retorno = false;
        //        btEnviar.Enabled = false;

        //        //Executa uma deleção já que não obteve êxito em todo o processo.
        //        Retorno obj = new Retorno();
        //        rot.Mes_ano = "01/" + dpMeses.Text;
        //        rot.IdGrupoFat = int.Parse(cbRemessa.Text);
        //        Controle.Ctl_Oracle.CtlOracle.DeleteRetornoFotosExternas(rot);

        //        MessageBox.Show("Não foi possível armazenar as fotos digitais por ter apresentado o erro: " + ex.Message, "Atenção!", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);

        //    }

        //    return retorno;
        //}
    }
}
